# -*- coding: utf-8 -*-
# @Time    : 2020/3/10 15:54
# @Author  : Weymouth
# @Email   : 261229090@qq.com
# @File    : 正则表达式.py
# @Software: PyCharm
# ---------------------------------------------------

# s = 'hello world'

# print(s.find('llo'))
# ret = s.replace('ll', 'xx')
# print(ret)
# print(s.split(' '))
# print(s.split('w'))

#string提供的方法是完全匹配
#引入正则表达式：模糊匹配

import re

# ret = re.findall('w\w{2}l', 'hello world')
# print(ret)

# ret = re.findall('w..l', 'hello world') #只能代指任意一个字符，除换行符外
# print(ret)

#"." 通配符
# ret = re.findall('w..l', 'hello w\t ld')
# print(ret)

#"^" 只头开始匹配
# ret = re.findall('^h...o', 'hasdadasdhello')
# print(ret)

#"$" 只从结尾开始匹配
# ret = re.findall('h...o$', 'hasdadasdhello')
# print(ret)

#"*" 重复匹配0到无穷
# ret = re.findall('a*', 'hasdadasdhello')
# print(ret)

#"+" 重复匹配，1到无穷，最少有1个
# ret = re.findall('a+', 'hasdadasdhello')
# print(ret)
# ret = re.findall('a+b', 'aaaaaabhjshkjabjfb')
# print(ret)

#"?" [0,1],匹配0到1个前面的字符
# ret = re.findall('a?b', 'aaaaaabhjshkjabjfb')
# print(ret)

#"{}" 匹配任意次数
# ret = re.findall('a{5}b', 'aaaaaabhjshkjabjfb')
# print(ret)
# ret = re.findall('a{1,3}b', 'aaaab')
# print(ret)

#结论：*等于{0，正无穷}  +等价于{1，无穷}  ?等价于{0，1}

#[] ,字符集,类似或的意思,只能二选一
# ret = re.findall('[a-z]', 'adx')
# print(ret)
#[],字符集，取消元字符的特殊功能(\ ^ -)
# ret = re.findall('[w*]', '*')
# print(ret)
# ret = re.findall('[1-9,a-z,A-Z]', '12tyAS')
# print(ret)

#^,从尖嘴号开始匹配,放在[]中取反
# ret = re.findall('^iu', 'iusssstt')
# print(ret)
# ret = re.findall('[^t]', 'jusssststt')
# print(ret)
# ret = re.findall('[^4,5]', 'jus4sss5tstt')
# print(ret)

#“\”，
#反斜杠后边跟元字符去除特殊功能，
#反斜杠后边跟普通字符实现特殊功能
#\d 匹配任何十进制数，它相当于类[0-9].
#\D 匹配任何非数字字符，它相当于类[^0-9]
#\s 匹配任何空白字符；它相当于类[\t\n\r\f\v]。
#\S 匹配任何非空白字符，它相当于[^ \t\n\r\f\v]
#\w 匹配任何字母数字字符；它相当于[a-zA-Z0-9_]
#\W 匹配任何非字母数字字符，它相当于[^a-zA-Z0-9_]
#\b: 匹配一个单词(特殊)边界，也就是指单词和空格间的位置。
# print(re.findall('\d{11}', 'fafafa1231213124124124'))
# print(re.findall('\sasd', 'fak asd'))
# print(re.findall('\w', 'fak asd'))  #除了空格外其他字符
# print(re.findall(r'I\b', 'hello,I am a LI$T'))  #捕捉特殊字符

# print(re.search('sb','fasjadasb'))  #匹配出第一个满足条件的结果,返回的是对象
#<re.Match object; span=(7, 9), match='sb'>,匹配成功，位置在7~9

# ret = re.search('sb','fasjadasb')
# print(ret)
# print(ret.group())

# ret = re.search('a\.','agj').group()
# print(ret)

# ret = re.search('a\+','a+gj').group()
# print(ret)

# ret = re.search(r'D\\c','asdafD\c').group()
# print(ret)

# ret = re.search(r'D\\c','asdafD\c').group()
# print(ret)

# ret = re.search("\\\\","asf\cd").group()
# print(ret)
#
# ret = re.search(r"\\","asf\cd").group()
# print(ret)

# ret = re.search("\bblow","blow")
# print(ret)

#“|”，“或”的意思


#“()”，作分组用
# print(re.search('(as)+','sdjkfasas').group())
# print(re.search('(as)|3','as3').group())

#例子
# ret = re.search('(?P<id>\d{3})/(?P<name>\w{3})','weeew34ttt123/ooo')#?P为起的组的名字
# print(ret.group())
# print(ret.group('id'))
# print(ret.group('name'))

# 正则表达式的方法：
# 1.findall():  所有结果都返回到一个列表里
# 2.search():  返回匹配到的第一个对象（object）,对象可以调用group()返回结果
# 3.match():  只在字符串开始匹配

# ret = re.match('asd','fhdsasd')
# print(ret)

# ret = re.split('[j,s]','sdjkasdl')
# print(ret)

# ret = re.sub('a..x', 's..b', 'hfjasalexxdhf')
# print(ret)

obj = re.compile('\.com')   #规则对象
ret = obj.findall('hfjasale.comxxdhf')
print(ret)